package effect.tile;

import board.PatternType;
import effect.EffectType;
import effect.character.area.AreaCharacterEffectEnum;
import effect.character.single.SingleCharacterEffectEnum;

public enum TileEffectEnum {
    HEALING_AURA	    ("Heal", EffectType.TILE_WALK, 5, PatternType.DIAMOND, 6, PatternType.SQUARE, 1, 1, SingleCharacterEffectEnum.HEAL),
    TRAP_EXPLOSION          ("Explosion Trap", EffectType.TILE_WALK, 5, PatternType.DIAMOND, 6, 1, AreaCharacterEffectEnum.EXPLOSION),
    SIGHT                   ("Sight", EffectType.TILE_SIMPLE, 5, PatternType.DIAMOND, 6, PatternType.SQUARE, 1, 1)
    ;

    protected String effectName;
    protected EffectType effectType;
    protected int baseSpeed;
    protected PatternType rangePattern;
    protected int rangeSize;
    protected PatternType effectPattern;
    protected int effectSize;
    protected int baseDuration;
    protected SingleCharacterEffectEnum singleCharacterEffectEnum;
    protected AreaCharacterEffectEnum areaCharacterEffectEnum;
    
    private TileEffectEnum(String effectName, EffectType effectType, int baseSpeed, PatternType rangePattern, int rangeSize, PatternType effectPattern, int effectSize, int baseDuration) {
	this.effectName = effectName;
	this.effectType = effectType;
	this.baseSpeed = baseSpeed;
	this.rangePattern = rangePattern;
	this.rangeSize = rangeSize;
	this.effectPattern = effectPattern;
	this.effectSize = effectSize;
        this.baseDuration = baseDuration;
    }
    
    private TileEffectEnum(String effectName, EffectType effectType, int baseSpeed, PatternType rangePattern, int rangeSize, PatternType effectPattern, int effectSize, int baseDuration, SingleCharacterEffectEnum singleCharacterEffectEnum) {
	this(effectName, effectType, baseSpeed, rangePattern, rangeSize, effectPattern, effectSize, baseDuration);
        this.singleCharacterEffectEnum = singleCharacterEffectEnum;
    }
    
    private TileEffectEnum(String effectName, EffectType effectType, int baseSpeed, PatternType rangePattern, int rangeSize, int baseDuration, AreaCharacterEffectEnum areaCharacterEffectEnum) {
	this.effectName = effectName;
	this.effectType = effectType;
	this.baseSpeed = baseSpeed;
	this.rangePattern = rangePattern;
	this.rangeSize = rangeSize;
        this.baseDuration = baseDuration;
        this.areaCharacterEffectEnum = areaCharacterEffectEnum;
    }

    public String getEffectName() {
	return effectName;
    }
    public EffectType getEffectType() {
	return effectType;
    }
    public int getBaseSpeed() {
	return baseSpeed;
    }
    public PatternType getRangePattern() {
	return rangePattern;
    }
    public int getRangeSize() {
	return rangeSize;
    }
    public PatternType getEffectPattern() {
	return effectPattern;
    }
    public int getEffectSize() {
	return effectSize;
    }
    public int getBaseDuration() {
        return baseDuration;
    }
    public SingleCharacterEffectEnum getSingleCharacterEffectEnum() {
        return singleCharacterEffectEnum;
    }
    public AreaCharacterEffectEnum getAreaCharacterEffectEnum() {
        return areaCharacterEffectEnum;
    }
}
